/**
 * 比较新旧对象数组并处理变更（不考虑新增对象）
 * @param {Array} oldArray - 旧对象数组
 * @param {Array} newArray - 新对象数组
 * @param {string} idKey - 对象唯一标识键（默认'id'）
 * @param {Function} handler - 变更处理函数
 * @param {boolean} deepCompare - 是否深度比较（默认false）
 */
export function compareAndHandleChanges(oldArray, newArray, idKey = 'id', handler, deepCompare = false) {
    // 创建旧数组的查找表
    const oldMap = new Map(oldArray.map(item => [item[idKey], item]));
    
    // 遍历新数组
    newArray.forEach(newItem => {
      const oldItem = oldMap.get(newItem[idKey]);
      
      // 只处理已存在且发生变更的对象
      if (oldItem) {
        const isChanged = deepCompare 
          ? !deepEqual(oldItem, newItem)
          : !shallowEqual(oldItem, newItem);
        
        if (isChanged) {
          const changes = findChanges(oldItem, newItem);
          handler(newItem, oldItem, changes);
        }
      }
    });
  }
  
  // 浅比较
  function shallowEqual(obj1, obj2) {
    const keys1 = Object.keys(obj1);
    const keys2 = Object.keys(obj2);
    
    if (keys1.length !== keys2.length) return false;
    
    return keys1.every(key => obj1[key] === obj2[key]);
  }
  
  // 深比较（简化版）
  function deepEqual(obj1, obj2) {
    return JSON.stringify(obj1) === JSON.stringify(obj2);
  }
  
  // 找出变更的字段
  function findChanges(oldObj, newObj) {
    const changes = {};
    const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);
    
    allKeys.forEach(key => {
      if (oldObj[key] !== newObj[key]) {
        changes[key] = {
          oldValue: oldObj[key],
          newValue: newObj[key]
        };
      }
    });
    
    return changes;
  }